package com.huawei.od;

import java.util.HashSet;
import java.util.Set;

/**
 * 打开最少监控问题：
 * 某长方形停车场，每个车位上方都有对应监控器，当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时监控器打开，
 * 给出某一时刻停车场的停车分布
 * 统计最少需要打开多少个监控器。输入描述为：第一行输入m,n表示长款.后面输入m行，每行有n个0或1，0和1用空格隔开，表示该行停车情况，0表示空位，
 * 1表示已停车。
 * <p>
 * 0 0 0
 * 0 1 0
 * 0 0 0  最少为 5 个监控打开
 */
public class T3 {

    public static void main(String[] args) {
        int[][] arr = {{0, 0, 0}, {0, 1, 0}, {0, 1, 0}, {0, 0, 0}};
        min(arr);
    }

    private static int min(int[][] arr) {
        int m = arr.length;

        int n = arr[0].length;

        Set<String> set = new HashSet<>();

        if (m == 1 && n == 1 && arr[0][0] == 0) {
            return 0;
        }
        if (m == 1 && n == 1 && arr[0][0] == 1) {
            return 1;
        }

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (arr[i][j] == 1) {
                    set.add(String.valueOf(i) + j);
                    if (i > 0) {
                        set.add(String.valueOf((i - 1)) + j);
                    }
                    if (i + 1 < arr.length) {
                        set.add(String.valueOf((i + 1)) + j);
                    }
                    if (j > 0) {
                        set.add(String.valueOf(i) + (j - 1));
                    }
                    if (j + 1 < arr[0].length) {
                        set.add(String.valueOf(i) + (j + 1));
                    }
                }
            }
        }
        return set.size();
    }
}
